home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MAKETC.ZIP / TELECARD.TXT < prev   
Text File  |  1994-08-30  |  45KB  |  1,068 lines

  1.  
  2. ===============================================================================
  3.               What you need to know about electronics telecards
  4. ===============================================================================
  5.  
  6.                               Content
  7.                              ---------
  8.  
  9.  I ) The cards from Gemplus, Solaic, Schlumberger, Oberthur:
  10.  
  11.     I-1) Introduction:
  12.     I-2) SCHEMATICS of the chip:
  13.     I-3) PINOUT of the connector:
  14.     I-4) Main features:
  15.     I-5) TIME DIAGRAMS:
  16.     I-6) Memory MAP of cards from France and Monaco:
  17.     I-5) Memory MAP of cards from other countries:
  18.  
  19. II ) The cards from ODS: (German cards)
  20.  
  21.     II-1) Introduction:
  22.     II-2) Pinout:
  23.     II-3) Main features:
  24.     II-4) Time Diagrams:
  25.     II-5) Memory Map:
  26.     II-6) Electrical features:
  27.  
  28.  
  29. III) Schematics of Readers:
  30.  
  31.     III-1) Reader 1:
  32.     III-2) Reader 2:
  33.  
  34. IV) The program:
  35.  
  36. -------------------------------------------------------------------------------
  37.  
  38. I ) The cards from Gemplus, Solaic, Schlumberger, Oberthur: (French cards)
  39.     ======================================================================
  40.  
  41.     I-1) Introduction:
  42.          ------------
  43.  
  44.        Since the middle of 80's have appeared a new generation of cards  ( the
  45. smart-cards  or  chip cards )  that have  replaced most of the magnetics cards
  46. applications  notably  for  telecom payement and  also for credit cards. These
  47. cards are far more secure than the magnetics cards, and there are several kind
  48. of  cards following  the application.  The simplier ones are the Simple Memory
  49. cards  like the  one used as  Telecard  for the telecom payement in the public
  50. phone-booths  ( Generaly all the memory content is  readable,  and there  is a
  51. maker-area that is unwritable ) , then there are  more sofisticated  cards:
  52. Memeory Cards with some area read protected by a key, these cards can  contain
  53. some  private informations in  the read-protected area.   At the end there are
  54. microprocessor-cards (cards working following the ISO-7816 protocol), that are
  55. the safiest ones  since these cards  have their own internal  Operating System
  56. that prevent  I/O  if the Pin code  has not been entered  in the cards  before
  57. ( These cards are used  when confidentiality  is needed,  like in  bank cards,
  58. crypted TV access cards, health cards, etc ... ).
  59.  
  60.  
  61.        About telecards, even if these cards are the less safe ones, don't think
  62. that  you  are  going  to  phone freely for that, in fact no.  All the data are
  63. readable since  there are  no confidential data inside,  the the cards are well
  64. done  enough to be  very secure for  the payement of  telecom communications in
  65. public booth.
  66.  
  67.        So, what is a phonecard exactly ? In fact generaly it's a 256 bits EPROM
  68. ( French likde cards ),  or a 128 bits EEPROM (German like cards) with a serial
  69. output and some other control pins.
  70.  
  71.        Then why can it not be refilled ?   Well,  indeed to refill the card you
  72. will  have to erase the cards with UV,  knowing that the cards is coated in  UV
  73. opaqued resin that prevent  UV from reaching the silicium chip, and even if you
  74. could  to erase the chip  you will have to program the manufactuer area that is
  75. write-protected by a lock-out fuse that was fused after the card programming in
  76. factory.
  77.  
  78.        Neithertheless it can be very interesting to study how these cards work,
  79. to see  which kind of data are inside and  how the data are maped  inside or to
  80. see  how many units are left  inside for exemple.  Besides  there  are a  great
  81. number of  applications of  these cards when there  are used (only for personal
  82. use of course) , since  you can use them as key to open a door, or you can also
  83. use them as key to secure a program, etc ....
  84.  
  85.        French Telecards have been created in 1984 and at this time constructors
  86. decided to build these cards in NMOS technology but now, they plan to change by
  87. 1994 all readers  in the public booths  and use CMOS technology. Also they plan
  88. to use  EEPROM to secure the cards and to add many usefull infornations in, and
  89. you will perhaps use phone cards to buy you bread or any thing else.
  90.  
  91. These cards are called Second Generation Telecards.
  92.  
  93.  
  94.     I-2) SCHEMATICS of the chip:
  95.          ----------------------
  96.  
  97.                     .-------------------.
  98.                     |                   |
  99.                   --|> Clk              |
  100.                     | _                 |
  101.                   --| R/W               |
  102.                     |                   |
  103.                   --| Reset             |
  104.                     |                   |
  105.                   --| Fuse              |
  106.                     |                   |
  107.                   --| Vpp               |
  108.                     |                   |
  109.                     |                   |
  110.                     '-.               .-'
  111.                       |               |
  112.                     .-------------------.
  113.                     |               Out |-- serial output
  114.                     '-------------------'
  115.  
  116.  
  117.     I-3) PINOUT of the connector:
  118.         -------------------------
  119.  
  120.  
  121.           AFNOR CHIP                                   ISO CHIP
  122.           ----------                                   --------
  123.  
  124.  -------------+-------------                 -------------+-------------
  125. |   8         |         4   |               |   1         |         5   |
  126. |             |             |               |             |             |
  127. +-------\     |     /-------+               +-------\     |     /-------+
  128. |   7    +----+----+    3   |               |   2    +----+    +    6   |
  129. |        |         |        |               |        |         |        |
  130. +--------|         |--------+               +--------|         |--------+
  131. |   6    |         |    2   |               |   3    |         |    7   |
  132. |        +    +----+        |               |        +----+----+        |
  133. +-------/     |     \-------+               +-------/     |     \-------+
  134. |   5         |         1   |               |   4         |         8   |
  135. |             |             |               |             |             |
  136.  -------------+-------------                 -------------+-------------
  137.  
  138.                                      NB: only the position of the chip is ISO
  139.                                          standardized and not the pinout
  140.  
  141. PINOUT:    1 : Vcc = 5V        5 : Gnd
  142. ------     2 : R/W             6 : Vpp = 21V
  143.            3 : Clock           7 : I/O
  144.            4 : Reset           8 : Fuse
  145.  
  146.     I-4) Main features:
  147.         ---------------
  148.  
  149.         - Synchronous protocol.
  150.         - N-MOS technology.
  151.         - 256x1 bit organisation.
  152.         - 96 written protected by a lock-out fuse.
  153.         - Low power 85mW in read mode.
  154.         - 21 V programming voltage.
  155.         - Access time: 500ns
  156.         - Operating range: -100C +700C
  157.         - Ten year data rentention.
  158.  
  159.  
  160.     I-5) TIME DIAGRAMS:
  161.         ---------------
  162.  
  163. +21V                                     _____________
  164. +5V ____________________________________|             |_________________ Vpp
  165.                                         :             :
  166. +5V                  ___________________:_____________:_________________ Reset
  167. 0V  ________________|                   :             :
  168.                     :                   :             :
  169. +5V     ____        :      ____         :       ______:______
  170. 0V  ___|    |_______:_____|    |________:______|      :      |__________ Clock
  171.        :    :       :     :    :        :      :      :      :
  172. +5V    :    :       :     :    :        :______:______:      :           _
  173. 0V  ___:____:_______:_____:____:________|      :      |______:__________ R/W
  174.        :    :       :     :    :        :      :      :      :
  175. +5V    :    :       :_____:    :________:      :      :      :__________
  176. 0V  XXXXXXXXXXXXXXXXX_____XXXXXX________XXXXXXXXXXXXXXXXXXXXXX__________ Out
  177.        :    :       :     :    :        :<-----><---->:      :
  178.        :    :       :     :    :        :10 to   10 to       :
  179.        :    :       :     :    :        :50 ms   50ms        :
  180.         Reset        Bit 1        Bit2                           Bit 3
  181.         card        reading      reading  Bit2 writing to 1     reading
  182.  
  183.  
  184.  
  185.     I-6) MEMORY MAP of cards from France and Monaco:
  186.         --------------------------------------------
  187.  
  188. Bytes       Bits      Binary     Hexa
  189.  
  190.                     +-----------+-----+
  191.   1        1 --> 8  |           |     | ---> Builder code.
  192.                     +-----------+-----+
  193.   2       9 --> 16  | 0000 0011 | $03 | ---> a french telecard
  194.                     +-----------+-----+
  195.   3      17 --> 24  |           |     |
  196.                     +-----------+-----+
  197.   4      25 --> 32  |           |     |
  198.                     +-----------+-----+
  199.   5      33 --> 40  |           |     |
  200.                     +-----------+-----+
  201.   6      41 --> 48  |           |     |
  202.                     +-----------+-----+
  203.   7      49 --> 56  |           |     |
  204.                     +-----------+-----+
  205.   8      57 --> 64  |           |     |
  206.                     +-----------+-----+
  207.   9      65 --> 72  |           |     |
  208.                     +-----------+-----+
  209.  10      73 --> 80  |           |     |
  210.                     +-----------+-----+
  211.  11      81 --> 88  |           |     |
  212.                     +-----------+-----+
  213.  12      33 --> 40  | 0001 0011 | $13 | ---> 120 units card
  214.                     | 0000 0110 | $06 | --->  50 units card
  215.                     | 0000 0101 | $05 | --->  40 units card
  216.                     +-----------+-----+
  217.  13-31  97 --> 248  |           |     | ---> The units area: each time a unit
  218.                     |           |     |      is used, then a bit is set to "1";
  219.                     |           |     |        Generaly the first ten units are
  220.                     |           |     |      fused in factory as test.
  221.                     |           |     |
  222.                     |           |     |
  223.                     |           |     |
  224.                     +-----------+-----+
  225.  32    249 --> 256  | 1111 1111 | $FF | ---> the card is empty
  226.                     +-----------+-----+
  227.  
  228.  
  229.  
  230.     I-7) MEMORY MAP of the other cards:
  231.         -------------------------------
  232.  
  233. Bytes       Bits      Binary     Hexa
  234.  
  235.                     +-----------+-----+
  236.   1        1 --> 8  |           |     |
  237.                     +-----------+-----+
  238.   2       9 --> 16  | 1000 0011 | $83 | ---> a telecard
  239.                     +-----------+-----+-----------+-----+
  240. 3-4      17 --> 32  | 1000 0000 | $80 | 0001 0010 | $12 | ---> 10 units card
  241.                     |           |     | 0010 0100 | $24 | ---> 22 units card
  242.                     |           |     | 0010 0111 | $27 | ---> 25 units card
  243.                     |           |     | 0011 0010 | $32 | ---> 30 units card
  244.                     |           |     | 0101 0010 | $52 | ---> 50 units card
  245.                     |           |     | 0110 0010 | $62 | ---> 60 units card
  246.                     |           |     | 1000 0010 | $82 | ---> 80 units card
  247.                     | 1000 0001 | $81 | 0000 0010 | $02 | ---> 100 untis card
  248.                     |           |     | 0010 0010 | $22 | ---> 120 units card
  249.                     |           |     | 0101 0010 | $52 | ---> 150 units card
  250.                     +-----------+-----+-----------+-----+
  251.   5      33 --> 40  |           |     | ---> $00 for sweden.
  252.                     +-----------+-----+
  253.   6      41 --> 48  |           |     |
  254.                     +-----------+-----+
  255.   7      49 --> 56  |           |     |
  256.                     +-----------+-----+
  257.   8      57 --> 64  |           |     |
  258.                     +-----------+-----+
  259.   9      65 --> 72  |           |     |
  260.                     +-----------+-----+
  261.  10      73 --> 80  |           |     |
  262.                     +-----------+-----+
  263.  11      81 --> 88  |           |     | ---> $11 for sweden
  264.                     +-----------+-----+
  265.  12      89 --> 96  | 0001 1110 | $1E | ---> Sweden
  266.                     | 0010 0010 | $22 | ---> Spain
  267.                     | 0011 0000 | $30 | ---> Norway
  268.                     | 0011 0011 | $33 | ---> Andorra
  269.                     | 0011 1100 | $3C | ---> Ireland
  270.                     | 0100 0111 | $47 | ---> Portugal
  271.                     | 0101 0101 | $55 | ---> Czech Republic
  272.                     | 0101 1111 | $5F | ---> Gabon
  273.                     | 0110 0101 | $65 | ---> Finland
  274.                     +-----------+-----+
  275.  13-31  97 --> 248  |           |     | ---> The units area: each time a unit
  276.                     |           |     |      is used, then a bit is set to "1";
  277.                     |           |     |
  278.                     |           |     |      Generaly the first two units are
  279.                     |           |     |      fused in factory as test.
  280.                     |           |     |
  281.                     |           |     |
  282.                     +-----------+-----+
  283.  32    249 --> 256  | 0000 0000 | $00 |
  284.                     +-----------+-----+
  285.  
  286.  
  287.  
  288. II ) The cards from ODS, Giesecke & Devrient, ORGA Karten systeme,
  289.      =============================================================
  290.      Uniqua, Gemplus, Schlumberger and Oldenbourg Kartensysteme:
  291.      ===========================================================
  292.  
  293.     II-1) Introduction:
  294.           ------------
  295.  
  296.         These cards are in fact 128 bit memory in NMOS technology, and the
  297. map of these cards are the following:
  298.  
  299.                64 bit EPROM written protected (manufaturer area).
  300.                40 bit EEPROM (5x8 bits).
  301.                24 bits set to "1".
  302.  
  303.  
  304.     II-2) Pinout:
  305.          --------
  306.  
  307.            ISO 7816-2
  308.  
  309.   -------------+-------------
  310.  |   1         |         5   |        Pinout:
  311.  |             |             |        -------
  312.  +-------\     |     /-------+
  313.  |   2    +----+    +    6   |          1 : Vcc = 5V    5 : Gnd
  314.  |        |         |        |          2 : Reset       6 : n.c.
  315.  +--------|         |--------+          3 : Clock       7 : I/O
  316.  |   3    |         |    7   |          4 : n.c.        8 : n.c.
  317.  |        +----+----+        |
  318.  +-------/     |     \-------+      n.c. : not connected
  319.  |   4         |         8   |
  320.  |             |             |
  321.   -------------+-------------
  322.  
  323.  
  324.     II-3) Main features:
  325.          ---------------
  326.  
  327.         - ISO 7816- 1/2 compatible.
  328.         - use a single 5V power supply.
  329.         - low power consuption.
  330.         - NMOS technology.
  331.  
  332.     II-4) Time Diagrams:
  333.         ----------------
  334.  
  335. Reset:
  336. ------
  337.   The address counter is reset to 0 when the clock line CLK is raised while
  338. the control line R is high. Note that the address counter can not be reset
  339. when it is in the range 0 to 7.
  340.  
  341.       __________________
  342. _____|                  |_____________________________________________ Reset
  343.      :                  :
  344.      :        _____     :  _____       _____       _____       _____
  345. _____:_______|     |____:_|     |_____|     |_____|     |_____|     |_ Clk
  346.      :       :          : :     :     :     :     :     :     :     :
  347. _____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_
  348. _____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_ (Address)
  349.      :                  :       :           :           :           :
  350. _____:                  :_______:___________:___________:___________:_
  351. _____XXXXXXXXXXXXXXXXXXXX_______|___________|___________|___________|_ Data
  352. Bit n                      Bit 0    Bit 1        Bit2       Bit3
  353.  
  354.    The address counter is incremented by 1 with each rising edge of the clock
  355. signal Clk, for as long as the control line R remains low. The data held in
  356. each addressed bit is output to I/O contact each time Clk falls. It is not
  357. impossible to decrement the address counter, therefore to address an earlier
  358. bit, the address counter must be reset then incremented to require value.
  359.  
  360.  
  361. Write:
  362. ------
  363.    All unwritten or erased bits in the address 64-104 may be unwritten to.
  364. When a memory cell is unwritten to, it is set to 0. The addressed cell is
  365. unwritten to by the following sequence.
  366.  
  367. 1- R is raised while Clk is low, to disable address counter increment for one
  368. clock pulse.
  369.  
  370. 2- Clk is then raised for a minimum of 10ms to write to the address bit.
  371.  
  372. When to write operation ends, and Clk falls, the address counter is unlocked,
  373. and the content of the written cell, which is now 0, is output to I/O contact
  374. if the operation is correct.
  375. The next Clk pulse will increment the address by one, then the write sequence
  376. can be repeated to write the next bit.
  377.  
  378.               _____                                _____
  379. _____________|     |______________________________|     |_______________  Reset
  380.              :                                    :
  381.      ___     :           _____           ___      :           _____
  382. ____|   |____:__________|     |_________|   |_____:__________|     |____  Clk
  383.     :        :          :     :         :   :     :          :     :
  384. ____:________:__________:_____:_________:___:_____:__________:_____:_____
  385.  n  |      n+1          |     n+2       |   :    n+3         |     :
  386. (Address)
  387. ----'--------:----------'-----:---------'---:-----:----------'-----:-----
  388.              :          :     :             :     :          :     :
  389. _________   _:          :     : ____________:  ___:          :     :
  390. _________XXX_XXXXXXXXXXXXXXXXXXX____________ XX___XXXXXXXXXXXXXXXXXXXXXXX  I/O
  391.    n      n+1           :     :     n+1        n+2           :     :
  392.                         :     :                              :     :
  393.                          write                                write
  394.  
  395.  
  396. WriteCarry:
  397. -----------
  398.  
  399.    A counter is erased by performing the WRITECARRY sequence on the stage of
  400. the next highest weighing to that to be erased.
  401.  
  402. The writecarry sequence is as follows:
  403.  
  404. 1 - Set the address counter to an unwritten bit in the next highest counter
  405. stage to that to be erased.
  406.  
  407. 2 - Increment is disabled on the following rising edge of R where Clk remains
  408. low.
  409.  
  410. 3 - Clk is then raised for a minimum of 10ms, while R is low, to write to the
  411. next address bit.
  412.  
  413. 4 - R is the raised again while Clk remains low to disable increment a second
  414. time.
  415.  
  416. 5 - Clk is the raised for a minimum of 1ms, while R is low, to write to the
  417. addressed bit a second time, erasing the counter level immediately below that
  418. the addressed bit.
  419.  
  420.        _____                      _____
  421. ______|     |____________________|     |_________________________________  Rst
  422.       :                          :
  423.       :            _______       :              _______        ___
  424. ______:___________|       |______:_____________|       |______|   |______  Clk
  425.       :           :       :      :             :       :      :   :
  426.       :           :       :      :             :       :      :   :
  427. <------------------------- address n ------------------------>:<--- n+1 ------
  428.       :           :       :      :             :       :          :
  429.       :           :       :      :             :       :          :
  430. ______:           :       :______:             :       :__________: _____
  431. ______XXXXXXXXXXXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXXXX__________XX_____  I/O
  432.                   :       :  n                 :       :     n        n+1
  433.                   :       :                    :       :
  434.                     Write                        Erase
  435.  
  436.      II-5) Memory Map:
  437.          -------------
  438.  
  439. Bytes       Bits      Binary     Hexa
  440.  
  441.                     +-----------+-----+
  442.   1       1 -->   8 |           |     |
  443.                     +-----------+-----+
  444.   2       9 -->  16 | 0010 1111 | $2F | ---> Germany
  445.                     | 0011 0111 | $37 | ---> Netherland
  446.                     | 0011 1011 | $3B | ---> Greece
  447.                     +-----------+-----+
  448.   3      17 -->  24 |           |     |
  449.   4      25 -->  32 |           |     | ---> Issuer area (written protected)
  450.   5      33 -->  40 |           |     |
  451.   6      41 -->  48 |           |     |
  452.   7      49 -->  56 |           |     |
  453.   8      57 -->  64 |           |     |
  454.                     +-----------+-----+
  455.   9      65 -->  72 |           |     | ---> c4096  )
  456.  10      73 -->  80 |           |     | --->  c512  )
  457.  11      81 -->  88 |           |     | --->   c64  ) 5 stage octal counter
  458.  12      89 -->  96 |           |     | --->    c8  )
  459.  13      97 --> 104 |           |     | --->    c0  )
  460.                     +-----------+-----+
  461.  14     105 --> 112 | 1111 1111 | $FF |
  462.  15     113 --> 120 | 1111 1111 | $FF | ---> area of bits set to "1"
  463.  16     120 --> 128 | 1111 1111 | $FF |
  464.                     +-----------+-----+
  465.  
  466. The Issuer area:
  467. ----------------
  468.  
  469.     This issuer consists of 40 bits. The contents of the issuer area are
  470. specified by the card issuer, and are fixed during the manufacturing process.
  471. The contents of the issuer area will include data such as serial numbers,
  472. dates, and distribution centers.
  473.  
  474. This area may only be read.
  475.  
  476. The Counter area:
  477. -----------------
  478.  
  479.    The counter area stores the card's units. Its initial value is specified
  480. by the card issuer and set during manufacturing.
  481.  
  482. The counter area is divided into a 5 stage abacus. The octal value of each
  483. stage is defined by the number of bits set to '1' and this stage value must
  484. be weighted by the coeficient 8^n ( where n is among [4..0] ).
  485.  
  486.       Exemple: For a card with 15818 units (or money units) left.
  487.       --------
  488.  
  489.              Byte9      Byte10     Byte11     Byte12     Byte13
  490.     --------------------------------------------------------------
  491.             00000111 - 00111111 - 01111111 - 00000001 - 00000011
  492.     --------------------------------------------------------------
  493.             (3)octal   (6)octal   (7)octal   (1)octal   (2)octal
  494.     --------------------------------------------------------------
  495.      Value = 3*8^4   +  6*8^3   +  7*8^2   +  1*8^1   +  2*8^
  496.     --------------------------------------------------------------
  497.      TOTAL = 15818 Units
  498.  
  499.  
  500.  
  501. Note that you can only decrease the counter and it is not authorised to write
  502. in the counter a value greater than the old value.
  503.  
  504.  
  505.     I-6) Electrical features:
  506.         --------------------
  507.  
  508. Maximum ratings:
  509. ----------------
  510.  
  511.                        +--------+------+------+------+
  512.                        | Symbol | Min  |  Max | Unit |
  513. +----------------------+--------+------+------+------+
  514. | Supply voltage       |   Vcc  | -0.3 |    6 |   V  |
  515. +----------------------+--------+------+------+------+
  516. | Input voltage        |   Vss  | -0.3 |    6 |   V  |
  517. +----------------------+--------+------+------+------+
  518. | Storage temperature  |  Tstg  |  -20 |  +55 |  0C  |
  519. +----------------------+--------+------+------+------+
  520. | Power dissipassion   |    Pd  |   -  |   50 |  mW  |
  521. +----------------------+--------+------+------+------+
  522.  
  523.  
  524. DC caracteristics:
  525. ------------------
  526.                             +--------+-----+-----+-----+------+
  527.                             | Symbol | Min.| Typ.| Max.| Unit |
  528. +---------------------------+--------+-----+-----+-----+------+
  529. | Suplly current            |   Icc  |  -  |  -  |   5 |   mA |
  530. +---------------------------+--------+-----+-----+-----+------+
  531. | Input Voltage (low)       |    Vl  |   0 |  -  | 0.8 |    V |
  532. +---------------------------+--------+-----+-----+-----+------+
  533. | Input voltage (high)      |    Vh  | 3.5 |  -  | Vcc |    V |
  534. +---------------------------+--------+-----+-----+-----+------+
  535. | Input current R           |    Ih  |  -  |  -  | 100 |   uA |
  536. +---------------------------+--------+-----+-----+-----+------+
  537. | Input current Clk         |    Il  |  -  |  -  | 100 |   uA |
  538. +---------------------------+--------+-----+-----+-----+------+
  539. | Output current (Vol=0.5V) |   Iol  |  -  |  -  |  10 |   uA |
  540. +---------------------------+--------+-----+-----+-----+------+
  541. | Output current (Voh=5V)   |   Ioh  |  -  |  -  | 0.5 |   mA |
  542. +---------------------------+--------+-----+-----+-----+------+
  543.  
  544. AC caracteristics:
  545. ------------------     +--------+------+------+------+
  546.                        | Symbol | Min. | Max. | Unit |
  547. +----------------------+--------+------+------+------+
  548. | Pulse duration       |    tr  |   50 |   -  |  us  |
  549. | R address reset      |        |      |      |      |
  550. +----------------------+--------+------+------+------+
  551. | Pulse duration       |    ts  |   10 |   -  |  us  |
  552. | R write              |        |      |      |      |
  553. +----------------------+--------+------+------+------+
  554. | High level Clk       |    th  |    8 |   -  |  us  |
  555. +----------------------+--------+------+------+------+
  556. | Low level Clk        |    tl  |   12 |   -  |  us  |
  557. +----------------------+--------+------+------+------+
  558. | Write window         | Twrite |   10 |   -  |  ms  |
  559. +----------------------+--------+------+------+------+
  560. | Erase window         | Terase |   10 |   -  |  ms  |
  561. +----------------------+--------+------+------+------+
  562. |                      |   tv1  |    5 |   -  |  us  |
  563. +----------------------+--------+------+------+------+
  564. |                      |   tv2  |  3.5 |   -  |  us  |
  565. +----------------------+--------+------+------+------+
  566. |                      |   tv3  |  3.5 |   -  |  us  |
  567. +----------------------+--------+------+------+------+
  568. |                      |   tv4  |  3.5 |   -  |  us  |
  569. +----------------------+--------+------+------+------+
  570. |                      |   tv5  |  3.5 |   -  |  us  |
  571. +----------------------+--------+------+------+------+
  572. |                      |   tv6  |    5 |   -  |  us  |
  573. +----------------------+--------+------+------+------+
  574. |                      |   tv7  |    5 |   -  |  us  |
  575. +----------------------+--------+------+------+------+
  576. |                      |   tv8  |   10 |   -  |  us  |
  577. +----------------------+--------+------+------+------+
  578.  
  579.  
  580.  
  581. III) Schematics of Readers:
  582.     =======================
  583.  
  584.      III-1) Reader 1:
  585.            ----------
  586.  
  587.    External 5V (Optional)
  588.  
  589. 5V o------,
  590.           |                 /             T2  PNP      d13  r7 10
  591. 0V o--,   |                /               BC 177     |\ |  _____
  592.       |   |      ,-------o/   o--*------. E      C .--| >+-[_____]--------,
  593.     __+__ |      |               |       \        /   |/ |                |
  594.     \\\\\ |    __|__ Batery      |         \    /                         |
  595.           |      -   22.5V       |       ---------                        |
  596. .......   |      |               |   _____   |   _____                    |
  597.        :  |    __+__             +--[_____]--*--[_____]--,                |
  598.    D2  :  |    \\\\\                r6 150k     r5 15k   |                |
  599. 4 o-------|---------------------------*------------------|-------------,  |
  600.        :  |                           |   r3 220k       / C            |  |
  601.    Ack :  |                           |   _____      |/    T1 - NPN    |  |
  602. 10 o------|--------.                  '--[_____]-*---|      BC107      |  |
  603.        :  |        |                      _____  |   |\                |  |
  604.        : ,-,      ,-,                 +--[_____]-'      \ E            |  |
  605.        : | |r2    | |r1               |  r4 390k         |             |  |
  606.        : | |220   | |22k            __+__              __+__           |  |
  607.        : |_|      |_|               \\\\\              \\\\\           |  |
  608.        :  |  |\ |  |                                                   |  |
  609.        :  *--| >+--|----------------*----------------------------------|--*
  610.        :  |  |/ |  |          ,-----|-----------------------------,    |  |
  611.        :  |  d1    |          |     |   ,----------,----------,   |    |  |
  612.        :  |        |          |     *---|--*  Fuse | Reset *--|---'    |  |
  613.        :  |        |          |     |   |----------|----------|        |  |
  614.    D0  :  |        |          |   ,-|---|--*   I/O | Clk   *--|---,    |  |
  615. 2 o-------|--------|----------'   | |   |----------|----------|   |    |  |
  616.        :  |        |              | '---|--*   Vpp | R/W   *--|---|----'  |
  617.   Busy :  |        |              |     |----------|----------|   |       |
  618. 11 o------|--------|--------------' ,---|--*   Gnd | 5V    *  |   |       |
  619.        :  |        |                |   '----------'-------|--'   |       |
  620.    D1  :  |        |              __+__    Chip connector  |      |       |
  621. 3 o-------|--------|--------,     \\\\\                    |      |       |
  622.        :  |        |        '------------------------------|------'       |
  623.   Str  :  |  |\ |  |                                       |              |
  624. 1 o-------*--| >+--*----*----*----*----*-------------------'              |
  625.        :   d2|/ |  |d3  |d4  |d5  |d6  |d7                                |
  626.        :          -+-  -+-  -+-  -+-  -+-                                 |
  627.        :          /_\  /_\  /_\  /_\  /_\                                 |
  628.    D3  :           |    |    |    |    |   |\ | d8                        |
  629. 5 o----------------*----|----|----|----|---| >+-------*-------------------'
  630.        :                |    |    |    |   |/ |       |
  631.        :                |    |    |    |              |
  632.    D4  :                |    |    |    |   |\ | d9    |
  633. 6 o---------------------*----|----|----|---| >+-------*
  634.        :                     |    |    |   |/ |       |
  635.        :                     |    |    |              |
  636.    D5  :                     |    |    |   |\ | d10   |
  637. 7 o--------------------------*----|----|---| >+-------*
  638.        :                          |    |   |/ |       |
  639.        :                          |    |              |
  640.    D6  :                          |    |   |\ | d11   |
  641. 8 o-------------------------------*----|---| >+-------*
  642.        :                               |   |/ |       |
  643.        :                               |              |
  644.    D7  :                               |   |\ | d12   |
  645. 9 o------------------------------------*---| >+-------'
  646.        :                                   |/ |
  647.        :
  648.        :
  649. 25 o------.
  650.        :  |
  651. .......:  |                                 d1 to d13: 1N4148
  652.         __+__
  653.         \\\\\
  654.  
  655. Centronic port
  656.  
  657.  
  658.      III-2) Reader 2:
  659.             ---------
  660.  
  661.                                                            Zener 3.3V
  662.               2x1N4001         ________                150
  663.            |\ |     |\ |      |        |              _____  | /|        (6)
  664. o----,  ,--+ >+--*--+ >+--*---+  7824  +----*--o   o-|_____|-+< +-*----o Vpp
  665.      |  |  |/ |  |  |/ |  |   |________|    |                | \| |
  666.      )||(  220F |  220F |        |      ===== 0.22F           _+_
  667. 220V )||(    25V | +  40V | +      |        |                    / \  1N4148
  668.      )||(      =====    =====    __+__    __+__                 '-+-'
  669.  ~   )||(        | -      | -    \\\\\    \\\\\                  ,+,
  670.      |  |   ___  |        |                                      | | 12
  671. o----'  '--o   o-*      __+__                                    | |
  672.            card  |      \\\\\  ________                          '+'   12
  673.          present |  |\ |      |        |                          |   _____
  674. (1)
  675.                  '--+ >+------+  7805  +------*-------------------*--|_____|-o
  676. Vcc
  677.                     |/ |      |________|      |                   |
  678.                    1N4001          |         _+_                  |
  679.                                    |         \ / --->            ,+,
  680.                                  __+__       -+-  --->           | |
  681.                                  \\\\\        |                  | | 4.7k
  682.                                              ,+,                 '+'
  683.                                              | |                  |
  684. (7)
  685.                                              | | 680             *----------o
  686. I/O
  687.                                              '+'                  |
  688.                                               |         Busy (11) o
  689.                                               |
  690. (4)
  691.                                             __+__         D0 (2)  o-----*----o
  692. Raz
  693.                                             \\\\\                       |
  694.                                                               4.7nF   =====
  695.                                                                         |
  696.                                                                       __+__
  697.                                                                       \\\\\
  698. (3)
  699.                                                           D1 (3)  o----------o
  700. Clk
  701.  
  702.  
  703. (2)
  704.                                                           D2 (4)  o----------o
  705. W
  706.  
  707.  
  708.                                                          Gnd (25) o
  709.                                                                   |   fuse
  710. (8)
  711.                                                                   *--~~~~~---o
  712. Fus
  713.                                                                 __+__
  714.                                                                 \\\\\
  715.  
  716.  
  717. IV) The program:
  718.     ===========
  719.  
  720.     The following program will enable you to read telecards on you PC if you
  721. build the precedent reader.
  722.  
  723. --------------- cut here (begin)
  724. (*****************************************************************************)
  725. (*                            T E L E C A R D . PAS                          *)
  726. (*****************************************************************************)
  727. (*  This program enable you to dumb the memory of electronics phonecards     *)
  728. (*  from all over the world, so that you will be able to see which country   *)
  729. (*  the card is from how many units are left and so on ....                  *)
  730. (*****************************************************************************)
  731.  
  732. USES crt,dos;
  733.  
  734. CONST port_address=$378;     (* Select Printer PORT 1 *)
  735.  
  736. TYPE string8=string[8];
  737.      string2=string[2];
  738.  
  739. VAR reg         : registers;
  740.     i,j         : integer;
  741.     Data        : array[1..32] of byte;
  742.     car         : char;
  743.     byte_number : integer;
  744.     displaying  : char;
  745.  
  746. {-----------------------------------------------------------------------------}
  747. { PROCEDURE Send(b:byte);                                                     }
  748. {                                                                             }
  749. {       - Send a byte on the selected printer port.                           }
  750. {-----------------------------------------------------------------------------}
  751.  
  752. PROCEDURE Send(b:byte);
  753.  
  754.   BEGIN port[port_address]:=b;
  755.   END;
  756.  
  757. {-----------------------------------------------------------------------------}
  758. { FUNCTION Get:byte;                                                          }
  759. {                                                                             }
  760. {       - Get a byte from the status register of the selected printer port.   }
  761. {-----------------------------------------------------------------------------}
  762.  
  763. FUNCTION Get:byte;
  764.  
  765.   BEGIN get:=port[port_address+1];
  766.   END;
  767.  
  768. {-----------------------------------------------------------------------------}
  769. { FUNCTION dec2hexa_one(decimal_value):hexa_character_representation;         }
  770. {                                                                             }
  771. {       - convert a 4 bit long decimal number to hexadecimal.                 }
  772. {-----------------------------------------------------------------------------}
  773.  
  774. FUNCTION dec2hexa(value:byte):char;
  775.  
  776.   BEGIN case value of
  777.           0..9   : dec2hexa:=chr(value+$30);
  778.           10..15 : dec2hexa:=chr(value+$37);
  779.         END;
  780.   END;
  781.  
  782. {-----------------------------------------------------------------------------}
  783. { FUNCTION d2h(decimal_byte):string2;                                         }
  784. {                                                                             }
  785. {       - convert a decimal byte to its hexadecimal representation.           }
  786. {-----------------------------------------------------------------------------}
  787.  
  788. FUNCTION d2h(value:byte):string2;
  789.  
  790.   BEGIN d2h:=dec2hexa(value div $10) + dec2hexa(value and $0F);
  791.   END;
  792.  
  793. {-----------------------------------------------------------------------------}
  794. { FUNCTION Binary(byte):string8;                                              }
  795. {                                                                             }
  796. {       - Convert a byte to its binary representation.                        }
  797. {-----------------------------------------------------------------------------}
  798.  
  799. FUNCTION Binary( b : byte):string8;
  800.  
  801.   VAR weigth : byte;
  802.       s      : string8;
  803.  
  804.   BEGIN weigth:=$80;
  805.         s:='';
  806.         while (weigth > 0) do
  807.         BEGIN if ((b and weigth) = weigth) then s:=s+'1'
  808.               else s:=s+'0';
  809.               weigth:=weigth div $02;
  810.         END;
  811.         Binary:=s;
  812.   END;
  813.  
  814. {-----------------------------------------------------------------------------}
  815.  
  816. FUNCTION Units:byte;
  817.  
  818.   VAR  u, i : integer;
  819.        s    : string8;
  820.  
  821.   BEGIN u:=0;
  822.         i:=13;
  823.         while (Data[i] = $FF) do
  824.         BEGIN u:=u+8;
  825.               i:=i+1;
  826.         END;
  827.         s:=Binary(Data[i]);
  828.         while(s[1]='1') do
  829.               BEGIN inc(u);
  830.               s:=copy(s,2,length(s));
  831.         END;
  832.         units:=u;
  833.   END;
  834.  
  835. {-----------------------------------------------------------------------------}
  836.  
  837. FUNCTION Octal_Unit_Count:LongInt;
  838.  
  839.   FUNCTION BitCount( Data : integer ):integer;
  840.  
  841.     VAR    i : integer;
  842.  
  843.     BEGIN i:=0;
  844.           while ((Data and $01)=$01) do
  845.           BEGIN Data:=Data div 2;
  846.                 inc(i);
  847.           END;
  848.           BitCount:=i;
  849.     END;
  850.  
  851.   BEGIN Octal_Unit_Count:= 4096*BitCount(Data[9])+512*BitCount(Data[10])
  852.                            +64*BitCount(Data[11])+8*BitCount(Data[12])
  853.                            +BitCount(Data[13]);
  854.   END;
  855.  
  856. {-----------------------------------------------------------------------------}
  857.  
  858. PROCEDURE Card_Type;
  859.  
  860.   BEGIN case Data[2] of
  861.          $03: BEGIN write('Telecard - France - ');
  862.                     case Data[12] of
  863.                      $13: write('120 Units - ',units-130,' Units left');
  864.                      $06: write('50 Units - ',units-60,' Units left');
  865.                      $15: write('40 Units - ',units-40,' Units left');
  866.                     END;
  867.               END;
  868.          $2F:write('Telecard - Germany - ', Octal_Unit_Count, ' Pfennigs left');
  869.          $37:write('Telecard - Neitherland - ',Octal_Unit_Count,' Units left');
  870.          $3B:write('Telecard - Greece - ', Octal_Unit_Count, ' Units left');
  871.          $83:BEGIN write('Telecard');
  872.                    case Data[12] of
  873.                      $1E: write(' - Sweden');
  874.                      $30: write(' - Norway');
  875.                      $33: write(' - Andorra');
  876.                      $3C: write(' - Ireland');
  877.                      $47: write(' - Portugal');
  878.                      $55: write(' - Czech Republic');
  879.                      $5F: write(' - Gabon');
  880.                      $65: write(' - Finland');
  881.                    END;
  882.                    if (Data[12] in [$30,$33,$3C,$47,$55,$65]) then
  883.                    BEGIN case ((Data[3] and $0F)*$100+Data[4]) of
  884.                           $012: write (' - 10 Units - ',units-12,' Units left');
  885.                           $024: write (' - 22 Units - ',units-24,' Units left');
  886.                           $027: write (' - 25 Units - ',units-27,' Units left');
  887.                           $032: write (' - 30 Units - ',units-32,' Units left');
  888.                           $052: write (' - 50 Units - ',units-52,' Units left');
  889.                           $067: write (' - 65 Units - ',units-62,' Units left');
  890.                           $070: write (' - 70 Units - ',units-70,' Units left');
  891.                           $102: write (' - 100 Units - ',units-102,' Units
  892. left');
  893.                           $152: write (' - 150 Units -  ',units-152,' Units
  894. left');
  895.                          END;
  896.                     END;
  897. {                    write(' - N0 ',Data[5]*$100+Data[6]);}
  898.               END;
  899.         END;
  900.   END;
  901.  
  902. {-----------------------------------------------------------------------------}
  903.  
  904. PROCEDURE waiting;
  905.  
  906.   BEGIN send($00);
  907.         write('Enter a card in the reader and press a key ...');
  908.         repeat until keypressed;
  909.         gotoxy(1, wherey);
  910.         clreol;
  911.   END;
  912.  
  913. {-----------------------------------------------------------------------------}
  914.  
  915. PROCEDURE Full_Displaying;
  916.  
  917.   BEGIN writeln('Memory dump:');
  918.         for i:=1 to 80 do write('-');
  919.         for i:=1 to (byte_number div 6 + 1) do
  920.         BEGIN for j:=1 to 6 do
  921.                 if j+6*(i-1) <= byte_number then
  922. write(binary(Data[j+6*(i-1)]):9)
  923.                 else write('         ');
  924.               write('    ');
  925.               for j:=1 to 6 do
  926.               if j+6*(i-1) <= byte_number then write(d2h(Data[j+6*(i-1)]),' ');
  927.               writeln;
  928.         END;
  929.         for i:=1 to 80 do write('-');
  930.         Card_Type;
  931.         writeln;
  932.   END;
  933.  
  934. {-----------------------------------------------------------------------------}
  935.  
  936. PROCEDURE Short_Displaying;
  937.  
  938.   VAR j : integer;
  939.  
  940.   BEGIN for j:=1 to byte_number do
  941.         BEGIN write(d2h(Data[j]),' ');
  942.         END;
  943.         writeln;
  944.   END;
  945.  
  946. {-----------------------------------------------------------------------------}
  947.  
  948. PROCEDURE Reading;
  949.  
  950.   VAR i, j  : integer;
  951.       Value : byte;
  952.  
  953.   BEGIN send($FE);
  954.         send($F8);
  955.         for i:=1 to 32 do
  956.         BEGIN Value:=0;
  957.               for j:=1 to 8 do
  958.               BEGIN Value:=Value*$02 + ((get and $08) div $08);
  959.                     send($FB);
  960.                     delay(1);
  961.                     send($F8);
  962.               END;
  963.               Data[i]:=Value;
  964.         END;
  965.         case displaying of
  966.           'F':full_displaying;
  967.           'S':short_displaying;
  968.         END;
  969.   END;
  970.  
  971. {-----------------------------------------------------------------------------}
  972.  
  973. PROCEDURE writting;
  974.  
  975.   VAR i,n:integer;
  976.       car:char;
  977.  
  978.   BEGIN write('Which bit do you want to set to "1" : ');
  979.         readln(n);
  980.  
  981.         waiting;
  982.         car:=readkey;
  983.  
  984.         send($FA);
  985.         send($F8);
  986.         for i:=1 to n do
  987.         BEGIN send($F9);
  988.               if i=n then
  989.               BEGIN send($FD);
  990.                     delay(20);
  991.                     send($FF);
  992.                     delay(20);
  993.               END;
  994.               send($FB);
  995.         END;
  996.         reading;
  997.   END;
  998.  
  999. {-----------------------------------------------------------------------------}
  1000.  
  1001. PROCEDURE Saving;
  1002.  
  1003.   VAR filename : string;
  1004.       f        : text;
  1005.       i        : word;
  1006.  
  1007.   BEGIN write('Enter the filename: ');
  1008.         readln(filename);
  1009.         assign(f, filename);
  1010.         rewrite(f);
  1011.  
  1012.         writeln(f,'Memory dump:');
  1013.         for i:=1 to 80 do write(f,'-');
  1014.         for i:=1 to (byte_number div 6 + 1) do
  1015.         BEGIN for j:=1 to 6 do
  1016.                 if j+6*(i-1) <= byte_number then
  1017. write(f,binary(Data[j+6*(i-1)]):9)
  1018.                 else write(f,'         ');
  1019.               write(f,'    ');
  1020.               for j:=1 to 6 do
  1021.               if j+6*(i-1) <= byte_number then write(f,d2h(Data[j+6*(i-1)]),'
  1022. ');
  1023.               writeln(f);
  1024.         END;
  1025.         for i:=1 to 80 do write(f,'-');
  1026.         close(f);
  1027.   END;
  1028.  
  1029. {-----------------------------------------------------------------------------}
  1030.  
  1031. PROCEDURE initialize;
  1032.  
  1033.   VAR i : integer;
  1034.  
  1035.   BEGIN byte_number:=32;
  1036.         displaying:='F';
  1037.         clrscr;
  1038.         writeln(' 1 - to dump a 256 bits card');
  1039.         writeln(' 2 - to dump a 128 bits card');
  1040.         writeln(' F - to display in full format');
  1041.         window(41,1,80,25);
  1042.         writeln(' S  - to display in short format');
  1043.         writeln(' F2 - to save in a file');
  1044.         writeln(' Q  - to exit the program');
  1045.         window(1,4,80,25);
  1046.         for i:=1 to 80 do write('=');
  1047.         window(1,5,80,25);
  1048.   END;
  1049.  
  1050. {=============================================================================}
  1051.  
  1052. BEGIN initialize;
  1053.       repeat waiting;
  1054.              car:=upcase(readkey);
  1055.              case car of
  1056.               'W':writting;
  1057.               'Q':;
  1058.               '1':byte_number:=32;
  1059.               '2':byte_number:=16;
  1060.               'F','S':displaying:=car;
  1061.               #00: BEGIN car:=readkey;
  1062.                          if car=#60 then saving;
  1063.                    END;
  1064.               else reading;
  1065.              END;
  1066.       until car='Q';
  1067. END.
  1068.